home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / wavsnd / src / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  7.6 KB  |  350 lines

  1. #include    "stdio.h"
  2. #include    "stdlib.h"
  3. #include    "string.h"
  4. #include    "io.h"
  5. #include    "stat.h"
  6. #include    "types.h"
  7. #include    "fcntl.h"
  8. #include    "conio.h"
  9.  
  10. #include    "cnvt.h"
  11.  
  12.  
  13.  
  14.  
  15. int option_cnvt(int *,char *,char *,char *,int,char **)    ;
  16. int open_LoadFile(int *,char *)    ;
  17. int open_SaveFile(int *,char *)    ;
  18.  
  19. int Type,ans,ret    ;
  20.  
  21. int W_fp,S_fp1,S_fp2    ;
  22.  
  23. char WAV_F[128],SND_F1[128],SND_F2[128]    ;
  24.  
  25.  
  26. int main(int argc,char *argv[])
  27. {
  28. ret=option_cnvt(&Type,WAV_F,SND_F1,SND_F2,argc,argv)    ;
  29. if(ret!=0)
  30.     {
  31.     puts("変換作業を中止します")    ;
  32.     return ret    ;
  33.     }
  34.  
  35. switch(Type)
  36.     {
  37.     case 1:    /* WAV to SND (モノラル) */
  38.         puts("WAV形式のファイルをSNDファイルにモノラル変換します")    ;
  39.         printf("読み込みファイル:%s\n",WAV_F)    ;
  40.         printf("書き込みファイル:%s\n",SND_F1)    ;
  41.         ret=open_LoadFile(&W_fp,WAV_F)    ;
  42.         if(ret!=0)
  43.             {
  44.             puts("変換作業を中止します")    ;
  45.             return ret    ;
  46.             }
  47.         ret=open_SaveFile(&S_fp1,SND_F1)    ;
  48.         if(ret!=0)
  49.             {
  50.             ret=_close(W_fp)    ;
  51.             puts("変換作業を中止します")    ;
  52.             return ret    ;
  53.             }
  54.         ret=Cnvt_WAV_SND(W_fp,S_fp1,0,1)    ;
  55.         if(ret!=0)
  56.             {
  57.             printf("変換エラー%d番が発生しました",ret)    ;
  58.             return ret    ;
  59.             }
  60.         puts("変換作業を完了しました")    ;
  61.         ret=_close(W_fp)    ;
  62.         if(ret!=0)
  63.             {
  64.             puts("ファイルクローズに失敗しました")    ;
  65.             return 1    ;
  66.             }
  67.         ret=_close(S_fp1)    ;
  68.         if(ret!=0)
  69.             {
  70.             puts("ファイルクローズに失敗しました")    ;
  71.             return 1    ;
  72.             }
  73.         puts("正常終了しました")    ;
  74.         break;
  75.  
  76.  
  77.     case 2:    /* SND to WAV (モノラル) */
  78.         puts("SNDファイルをWAV形式のファイルにモノラル変換します")    ;
  79.         printf("読み込みファイル:%s\n",SND_F1)    ;
  80.         printf("書き込みファイル:%s\n",WAV_F)    ;
  81.         ret=open_LoadFile(&S_fp1,SND_F1)    ;
  82.         if(ret!=0)
  83.             {
  84.             puts("変換作業を中止します")    ;
  85.             return ret    ;
  86.             }
  87.         ret=open_SaveFile(&W_fp,WAV_F)    ;
  88.         if(ret!=0)
  89.             {
  90.             ret=_close(S_fp1)    ;
  91.             puts("変換作業を中止します")    ;
  92.             return ret    ;
  93.             }
  94.         ret=Cnvt_SND_WAV(W_fp,S_fp1,0,1)    ;
  95.         if(ret!=0)
  96.             {
  97.             printf("変換エラー%d番が発生しました",ret)    ;
  98.             return ret    ;
  99.             }
  100.         puts("変換作業を完了しました")    ;
  101.         ret=_close(W_fp)    ;
  102.         if(ret!=0)
  103.             {
  104.             puts("ファイルクローズに失敗しました")    ;
  105.             return 1    ;
  106.             }
  107.         ret=_close(S_fp1)    ;
  108.         if(ret!=0)
  109.             {
  110.             puts("ファイルクローズに失敗しました")    ;
  111.             return 1    ;
  112.             }
  113.         puts("正常終了しました")    ;
  114.         break;
  115.  
  116.  
  117.     case 3:    /* WAV to SND (ステレオ) */
  118.         puts("WAV形式のファイルをSNDファイルにステレオ変換します")    ;
  119.         printf("読み込みファイル:%s\n",WAV_F)    ;
  120.         printf("書き込みファイル:%s\n",SND_F1)    ;
  121.         printf("                  %s\n",SND_F2)    ;
  122.         ret=open_LoadFile(&W_fp,WAV_F)    ;
  123.         if(ret!=0)
  124.             {
  125.             puts("変換作業を中止します")    ;
  126.             return ret    ;
  127.             }
  128.         ret=open_SaveFile(&S_fp1,SND_F1)    ;
  129.         if(ret!=0)
  130.             {
  131.             ret=_close(W_fp)    ;
  132.             puts("変換作業を中止します")    ;
  133.             return ret    ;
  134.             }
  135.         ret=open_SaveFile(&S_fp2,SND_F2)    ;
  136.         if(ret!=0)
  137.             {
  138.             ret=_close(W_fp)    ;
  139.             ret=_close(S_fp1)    ;
  140.             puts("変換作業を中止します")    ;
  141.             return ret    ;
  142.             }
  143.         ret=Cnvt_WAV_SND(W_fp,S_fp1,S_fp2,2)    ;
  144.         if(ret!=0)
  145.             {
  146.             printf("変換エラー%d番が発生しました",ret)    ;
  147.             return ret    ;
  148.             }
  149.         puts("変換作業を完了しました")    ;
  150.         ret=_close(W_fp)    ;
  151.         if(ret!=0)
  152.             {
  153.             puts("ファイルクローズに失敗しました")    ;
  154.             return 1    ;
  155.             }
  156.         ret=_close(S_fp1)    ;
  157.         if(ret!=0)
  158.             {
  159.             puts("ファイルクローズに失敗しました")    ;
  160.             return 1    ;
  161.             }
  162.         ret=_close(S_fp2)    ;
  163.         if(ret!=0)
  164.             {
  165.             puts("ファイルクローズに失敗しました")    ;
  166.             return 1    ;
  167.             }
  168.         puts("正常終了しました")    ;
  169.         break;
  170.  
  171.  
  172.     case 4:    /* SND to WAV (ステレオ) */
  173.         puts("SNDファイルをWAV形式のファイルにステレオ変換します")    ;
  174.         printf("読み込みファイル:%s\n",SND_F1)    ;
  175.         printf("                  %s\n",SND_F2)    ;
  176.         printf("書き込みファイル:%s\n",WAV_F)    ;
  177.         ret=open_LoadFile(&S_fp1,SND_F1)    ;
  178.         if(ret!=0)
  179.             {
  180.             puts("変換作業を中止します")    ;
  181.             return ret    ;
  182.             }
  183.         ret=open_LoadFile(&S_fp2,SND_F2)    ;
  184.         if(ret!=0)
  185.             {
  186.             ret=_close(S_fp1)    ;
  187.             puts("変換作業を中止します")    ;
  188.             return ret    ;
  189.             }
  190.         ret=open_SaveFile(&W_fp,WAV_F)    ;
  191.         if(ret!=0)
  192.             {
  193.             ret=_close(S_fp1)    ;
  194.             ret=_close(S_fp2)    ;
  195.             puts("変換作業を中止します")    ;
  196.             return ret    ;
  197.             }
  198.         ret=Cnvt_SND_WAV(W_fp,S_fp1,S_fp2,2)    ;
  199.         if(ret!=0)
  200.             {
  201.             printf("変換エラー%d番が発生しました",ret)    ;
  202.             return ret    ;
  203.             }
  204.         puts("変換作業を完了しました")    ;
  205.         ret=_close(W_fp)    ;
  206.         if(ret!=0)
  207.             {
  208.             puts("ファイルクローズに失敗しました")    ;
  209.             return 1    ;
  210.             }
  211.         ret=_close(S_fp1)    ;
  212.         if(ret!=0)
  213.             {
  214.             puts("ファイルクローズに失敗しました")    ;
  215.             return 1    ;
  216.             }
  217.         ret=_close(S_fp2)    ;
  218.         if(ret!=0)
  219.             {
  220.             puts("ファイルクローズに失敗しました")    ;
  221.             return 1    ;
  222.             }
  223.         puts("正常終了しました")    ;
  224.         break;
  225.  
  226.  
  227.     default:
  228.         puts("使い方")    ;
  229.         puts("    run386 -nocrt WAVSND.EXP {option} { wav  snd_L { snd_R } } } ")    ;
  230.         puts("")    ;
  231.         puts("オプション:")    ;
  232.         puts("    -S /S   WAVE形式のデータ wav.WAV を")    ;
  233.         puts("            SNDファイル snd_L.SND に変換する")    ;
  234.         puts("             snd_R を指定したときは wav.WAV をステレオ音声ファイルとみなし")    ;
  235.         puts("             snd_L.SND , snd_R.SND に左右の各チャンネルの音声を出力する")    ;
  236.         puts("")    ;
  237.         puts("    -W /W   SNDファイル snd_L.SND を")    ;
  238.         puts("            WAVE形式のデータ wav.WAV に変換する")    ;
  239.         puts("             snd_R を指定したときは snd_L.SND と snd_R.SND をステレオ音声の")    ;
  240.         puts("            左右のチャンネルと見なして読み込み FILE1.WAV をステレオ出力する")    ;
  241.         puts("")    ;
  242.         puts("    その他      ヘルプメッセージを表示する             ")    ;
  243.         puts("")    ;
  244.         puts("注意 ")    ;
  245.         puts("     各ファイル名は拡張子を付けずに指定してください!")    ;
  246.         puts("     変換時は必ず入出力両方のファイル名を指定してください!")    ;
  247.         puts("")    ;
  248.     }
  249.  
  250. return 0    ;
  251. }
  252.  
  253.  
  254. int option_cnvt(int *TYPE,char *WF,char *SF1,char *SF2,int ARGC,char *ARGV[])
  255. {
  256. if(ARGC<4)
  257.     {
  258.     *TYPE=0    ;
  259.     return 0    ;    /* ヘルプメッセージの表示 */
  260.     }
  261.  
  262. *TYPE=0    ;
  263.  
  264. if((_strcmpi(ARGV[1],"/S"))==0)    *TYPE=1    ;    /* WAV to SND */
  265. if((_strcmpi(ARGV[1],"-S"))==0)    *TYPE=1    ;
  266. if((_strcmpi(ARGV[1],"/W"))==0)    *TYPE=2    ;    /* SND to WAV */
  267. if((_strcmpi(ARGV[1],"-W"))==0)    *TYPE=2    ;
  268.  
  269. if(*TYPE==0) return 0    ;    /* ヘルプメッセージの表示 */
  270.  
  271. if(ARGC==4)
  272.     {
  273.         strcpy(WF,ARGV[2])    ;
  274.         strcpy(SF1,ARGV[3])    ;
  275.         strcat(WF,".WAV")    ;
  276.         strcat(SF1,".SND")    ;
  277.     }
  278.     else
  279.     {
  280.     if(ARGC==5)
  281.         {
  282.         strcpy(WF,ARGV[2])    ;
  283.         strcpy(SF1,ARGV[3])    ;
  284.         strcpy(SF2,ARGV[4])    ;
  285.         strcat(WF,".WAV")    ;
  286.         strcat(SF1,".SND")    ;
  287.         strcat(SF2,".SND")    ;
  288.         *TYPE=*TYPE+2    ;    /* ステレオと見なす */
  289.         if(strcmp(SF1,SF2)==0)
  290.             {
  291.             puts("出力ファイル名が異常です")    ;
  292.             return 1    ;
  293.             }
  294.         }
  295.         else
  296.         {
  297.         *TYPE=0    ;
  298.         return 0    ;    /* ヘルプメッセージの表示 */
  299.         }
  300.     }
  301.  
  302. return 0    ;
  303. }
  304.  
  305. int open_LoadFile(int *FP,char *FName)    /* 読み込みファイルをオープンする */
  306. {
  307. int ret    ;
  308.  
  309. ret=_access(FName,1)    ;
  310. if(ret!=0)
  311.     {
  312.     puts("\aエラー発生")    ;
  313.     printf("読み込みファイル %s のアクセスに失敗しました\n",FName)    ;
  314.     return 1    ;
  315.     }
  316. printf("読み込みファイル %s のアクセスに成功しました\n",FName)    ;
  317.  
  318. *FP=_open(FName,_O_RDONLY|_O_BINARY)    ;
  319. if(*FP==-1)    /* たぶんあり得ないことだと思う */
  320.     {
  321.     printf("読み込みファイル %s のオープンに失敗しました\n",FName)    ;
  322.     return 1    ;
  323.     }
  324.  
  325. return 0    ;
  326. }
  327.  
  328. int open_SaveFile(int *FP,char *FName)    /* 書き込みファイルをオープンする */
  329. {
  330. int ret    ;
  331.  
  332. ret=_access(FName,0)    ;
  333. if(ret==0)
  334.     {
  335.     puts("\aエラー発生")    ;
  336.     printf("書き込みファイル %s が既に存在します\n",FName)    ;
  337.     return 1    ;
  338.     }
  339. printf("書き込みファイル %s を新規作成します\n",FName)    ;
  340.  
  341. *FP=_open(FName,_O_WRONLY|_O_BINARY|_O_TRUNC|_O_CREAT,_S_IREAD|_S_IWRITE)    ;
  342. if(*FP==-1)    /* オープン失敗 */
  343.     {
  344.     printf("\a書き込みファイル %s のオープンに失敗しました\n",FName)    ;
  345.     return 1    ;
  346.     }
  347.  
  348. return 0    ;
  349. }
  350.